package com.chen.springboot.service;

import cn.hutool.core.lang.Dict;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chen.springboot.entity.Order;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

public interface OrderService {
    /**
     *
     * @param order 新建一个订单
     */
    void save(Order order);

    /**
     *
     * @param order 更新订单
     */
    void update(Order order);

    /**
     *
     * @param orderNo 发货
     */
    void ship(String orderNo);

    /**
     *
     * @param id 根据订单ID删除订单
     */
    void delete(Long id);

    /**
     *
     * @param ids 删除所选订单
     */
    void deleteAll(List<Long> ids);

    /**
     *
     * @param id 根据订单ID查询订单
     */
    Order getById(Long id);

    /**
     * 购买商品，新建一个订单，单独购买一个商品
     */
    void buy(Long itemId, Integer userId,Integer count);

    /**
     *
     * @param orders 通过购物车购买商品
     */
    void buyCart(List<Order> orders);

    /**
     * 加入购物车的时候，没有生成订单号，只有购买的时候才会生成
     * @param itemId 要加入购物车的物品ID
     * @param userId 用户的ID
     */
    void addToCart(Long itemId, Integer userId, Integer count);

    /**
     * 查询全部的订单消息
     * @param pageNum 当前的页数
     * @param pageSize 一页的大小
     * @param search 搜索的关键词
     * @return 结果集
     */
    Page<Order> findPage(Integer pageNum, Integer pageSize, String search);

    /**
     * 查询对应用户的订单信息
     * @param pageNum 当前页码
     * @param pageSize 每一页的条数
     * @param search 搜索的商品名称
     * @param state 查询订单的状态类型，0表示全部
     * @return 返回分页好的数据表
     */
    Page<Order> findUserOrder(Integer pageNum, Integer pageSize,String search,Integer state);

    /**
     *
     * @param orderNo 根据传入的订单编号查出该订单购买的商品
     */
    List<Order> findOrderByNo(String orderNo);

    /**
     *
     * @param id 确认收货
     */
    void receipt(Integer id);

    /**
     * 获取首页需要的图表数据
     * @return 图表数据
     */
    Dict charts();

    /**
     * 下载图表
     */
    void download(HttpServletResponse response);
}
